package pers.wensheng.patterns.creator_pattern.factory_pattern.abstract_factory_pattern;

import pers.wensheng.patterns.creator_pattern.factory_pattern.abstract_factory_pattern.entity.Coffee;
import pers.wensheng.patterns.creator_pattern.factory_pattern.abstract_factory_pattern.entity.Dessert;
import pers.wensheng.patterns.creator_pattern.factory_pattern.abstract_factory_pattern.factory.AmericanDessertFactory;
import pers.wensheng.patterns.creator_pattern.factory_pattern.abstract_factory_pattern.factory.ItalyDessertFactory;

/**
 *  抽象工厂模式
 *  如果要加同一个产品族的话，只需要再加一个对应的工厂类即可，不需要修改其他的类。
 *
 *  用一个产品族，不是同一级的了
 *  优点：
 * 当一个产品族中的多个对象被设计成一起工作时，它能保证客户端始终只使用同一个产品族中的对象。
 *  缺点：
 * 当产品族中需要增加一个新的产品时，所有的工厂类都需要进行修改。
 */
public class Main {
    public static void main(String[] args) {

        //创建意大利风味甜品工厂对象
//        ItalyDessertFactory factory = new ItalyDessertFactory();
        AmericanDessertFactory factory = new AmericanDessertFactory();
        //获取对应的拿铁咖啡和提拉米苏甜品
        Coffee coffee = factory.createCoffee();
        Dessert dessert = factory.createDessert();
        System.out.println(coffee.getName());
        dessert.show();


        ItalyDessertFactory italyDessertFactory = new ItalyDessertFactory();
        Dessert italyDessertFactoryDessert = italyDessertFactory.createDessert();
        Coffee italyDessertFactoryCoffee = italyDessertFactory.createCoffee();
        System.out.println(italyDessertFactoryCoffee.getName());
        italyDessertFactoryDessert.show();


    }
}
